package javafoundation.notes;

import org.apache.commons.codec.digest.DigestUtils;
import org.jetbrains.annotations.NotNull;

import java.text.DecimalFormat;
import java.text.NumberFormat;

import static java.lang.System.*;

/**
 * @ClassName StringOperate
 * @Description 字符串操作
 * @Author dzf
 * @Date 2022/10/28 9:35
 * @Version 1.0
 */
public class StringOperate {
    public static void main(String[] args) {

        String s1 = "230229199705054517";

        // 字符串截取
        strSub(s1);

        // 字符串加密
        strEncipher(s1);

        // 字符串替换
        String s2 =  "123,789,415.208556";
        strReplace(s2);

        // 判断字符串中是否 含有指定字符串
        strIndexOf(s1);

        // 字符串分割、正则校验
        String s3 = "A10;S20;W10;D30;X;A1A;B10A11;;A1;";
        strSplit(s3);

        // 获取字符串指定位置字符
        strChar(s3);

        // 获取字符串指定字符位置
        strCom(s3);

        // 以指定字符串开头、结尾
        String s4 = "I like Java";
        strWith(s4);


    }

    /**
     *
     * @Description  字符串截取方法
     * @Author dzf
     * @Date  2024/10/24 10:07
     * @Params  [s] 字符串
     * @Version 1.0
     **/
    public static void strSub (@NotNull String s) {
        String sY = s.substring(6, 10);
        String sM = s.substring(10, 12);
        String sD = s.substring(12, 14);
        out.println("身份证号提取出生年月日：" + sY + "-" + sM + "-" + sD);

        String sex = Integer.parseInt(s.substring(16,17))%2 == 0 ? "女" : "男";
        out.println("身份证号提取性别：" + sex);

        String s1 = s.substring(6);
        out.println("身份证号第六位之后的值：" + s1);
    }

    /**
     *
     * @Description 字符串加密
     * @author dzf
     * @Date 2024/10/24 11:04
     * @Params [s]
     * @Version 1.0
     **/
    public static void strEncipher (@NotNull String s) {
        String sha256Hex = DigestUtils.sha256Hex(s);
        out.println("sha256Hex 类型字符串加密输出：" + sha256Hex);
    }

    /**
     *
     * @Description 字符串替换
     * @Author dzf
     * @Date 2024/10/24 11:23
     * @Params [s]
     * @Version 1.0
     **/
    public static void strReplace (@NotNull String s) {

        String replace = s.replace(",", "");
        out.println("字符串','替换为空：" + replace);

        strToDouble(replace);
    }

    /**
     *
     * @Description 字符串转Double
     * @Author dzf
     * @Date 2024/10/24 14:25
     * @Params [s]
     * @Version 1.0
     **/
    public static void strToDouble (@NotNull String s) {
        Double of = Double.valueOf(s);
        out.println("字符串转Double：" + of);

        DecimalFormat format = new DecimalFormat("#0,000.00");
        String s1 = format.format(of);
        out.println("字符串转Double加格式：" + s1);

        String s2 = NumberFormat.getNumberInstance().format(of);
        out.println("字符串转Double加格式：" + s2);
    }

    /**
     *
     * @Description 判断字符串中是否 含有指定字符串
     * @Author dzf
     * @Date 2024/10/24 14:35
     * @Params [s]
     * @Version 1.0
     **/
    public static void strIndexOf (@NotNull String s) {
        int indexOf = s.indexOf("05");
        //不存在为-1
        out.println("打印第一个相同字符串'05'所在位置：" + indexOf);
    }

    /**
     *
     * @Description 字符串分割、正则校验
     * @Author dzf
     * @Date 2024/10/24 14:41
     * @Params [s]
     * @Version 1.0
     **/
    public static void strSplit (@NotNull String s) {
        String[] split = s.split(";");
        out.println("字符串分割、正则校验：");
        for (String s1 : split) {
            //使用简洁的字符类语法'\\d'而不是'[0-9]'.
            //用\\d代替[0-9]
            boolean b = s1.matches("[ASDW]\\d{1,2}");
            if (b){
                out.print(s1 +" ");
            }
        }
        out.println();
    }

    /**
     *
     * @Description 获取字符串指定位置字符
     * @Author dzf
     * @Date 2024/10/24 14:54
     * @Params [s]
     * @Version 1.0
     **/
    public static void strChar (@NotNull String s) {
        char at = s.charAt(4);
        out.println("获取字符串指定位置'4'字符: " + at);
    }

    /**
     *
     * @Description 获取字符串指定字符位置
     * @Author dzf
     * @Date 2024/10/24 14:54
     * @Params [s]
     * @Version 1.0
     **/
    public static void strCom (@NotNull String s) {
        int i = s.compareTo("a");
        out.println("获取字符串指定字符'a'位置：" + i);

        int i1 = s.compareTo("S");
        out.println("获取字符串指定字符'S'位置：" + i1);
    }

    /**
     *
     * @Description 以指定字符串开头、结尾
     * @Author dzf
     * @Date 2024/10/24 15:29
     * @Params [s]
     * @Version 1.0
     **/
    public static void strWith (@NotNull String s) {
        out.println(s + "是否以'I'开头：" + s.startsWith("I"));
        out.println(s + "是否以'Java'结尾：" + s.endsWith("Java"));
        out.println(s + "是否以'java'结尾：" + s.endsWith("java"));
    }
}
